﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace HelpDesk
{
    public partial class CulminacionPasoDesc : System.Web.UI.Page
    {
        string id;
        QueryBuilder objconsulta = new QueryBuilder();
        DataTable dtConsulta = new DataTable();
        bool EsValido = false;

        protected void Page_Load(object sender, EventArgs e)
        {
            id = Request.QueryString["TID"];
            dtConsulta = objconsulta.EjecutarQuery("SELECT PASO FROM FLUJO");
            for (int i = 0; i < dtConsulta.Rows.Count; i++)
            {
                if (string.Compare(id, dtConsulta.Rows[i].ItemArray[0].ToString()) == 0)
                {
                    EsValido = true;
                    break;
                }
            }
            if (!EsValido)
            {
                Response.Write("<script language=javascript>alert('Error: Parametros Invalidos');</script>");
                Response.Redirect("Principal.aspx");
            }
            else
            {
                GenerarDatos();
            }
        }

        private void GenerarDatos()
        {
            string consulta = //"SELECT FLUJO.ID_FLUJO AS FLUJO, FLUJO.DESCRIPCION_FLUJO, PROBLEMA.DESCRIPCION AS PROBLEMA,  ASIG_PASO_FLUJO.USUARIO_ENCARGADO AS UASIGNADO, FLUJO.PASO," +
                              "SELECT DISTINCT FLUJO.ID_FLUJO AS FLUJO, FLUJO.DESCRIPCION_FLUJO, PROBLEMA.DESCRIPCION AS PROBLEMA,  ASIG_PASO_FLUJO.USUARIO_ENCARGADO AS UASIGNADO, FLUJO.PASO," +

                         "FLUJO.TIEMPO_EJECUCION AS TTRABAJO, FLUJO.DESCRIPCION_PASO AS DESCRIPCION, PASO_FINAL, FLUJO_TICKET.ID_TICKET" +   //, FLUJO.TIEMPO_EJECUTADO
                         " FROM FLUJO" +
                         " JOIN PROBLEMA ON FLUJO.PROBLEMA = PROBLEMA.ID_PROBLEMA" +
                         " JOIN ASIG_PASO_FLUJO ON ASIG_PASO_FLUJO.FLUJO = FLUJO.ID_FLUJO" +
                         " JOIN FLUJO_TICKET ON FLUJO_TICKET.ID_FLUJO = ASIG_PASO_FLUJO.FLUJO" +
                         " JOIN TICKET ON TICKET.ID_TICKET = FLUJO_TICKET.ID_TICKET" +
                         " WHERE ASIG_PASO_FLUJO.USUARIO_ENCARGADO = '" + Session["Usuario"].ToString() + "'" +
                         " AND TICKET.FECHA_FIN IS NULL" +
                         " AND (FLUJO.PASO =" + id + ")";

                         //" FLUJO_TICKET ON FLUJO_TICKET.ID_FLUJO = ASIG_PASO_FLUJO.FLUJO" +
                         //" WHERE (FLUJO.PASO =" + id + ")";

                         //FROM FLUJO
                         //JOIN PROBLEMA ON FLUJO.PROBLEMA = PROBLEMA.ID_PROBLEMA
                         //JOIN ASIG_PASO_FLUJO ON ASIG_PASO_FLUJO.FLUJO = FLUJO.ID_FLUJO
                         //JOIN FLUJO_TICKET ON FLUJO_TICKET.ID_FLUJO = ASIG_PASO_FLUJO.FLUJO
                         //JOIN TICKET ON TICKET.ID_TICKET = FLUJO_TICKET.ID_TICKET
                         //WHERE ASIG_PASO_FLUJO.USUARIO_ENCARGADO = 'cope'
                         //AND TICKET.FECHA_FIN IS NULL
                         //AND FLUJO.PASO = 2
            dtConsulta = objconsulta.EjecutarQuery(consulta);

            lblFlujoCP.Text = dtConsulta.Rows[0].ItemArray[0].ToString();
            lblDescFlujoCP.Text = dtConsulta.Rows[0].ItemArray[1].ToString();
            lblProblemaCP.Text = dtConsulta.Rows[0].ItemArray[2].ToString();
            lblEncargadoCP.Text = dtConsulta.Rows[0].ItemArray[3].ToString();
            lblNoPasoCP.Text = dtConsulta.Rows[0].ItemArray[4].ToString();
            lblTiempoEjecucionCP.Text = dtConsulta.Rows[0].ItemArray[5].ToString() + "h";
            txtDescripcionPaso.Text = dtConsulta.Rows[0].ItemArray[6].ToString();

            //recordar que el sub 7 es para el check si es el paso final
            lblTicketCP.Text = dtConsulta.Rows[0].ItemArray[8].ToString();

            //if (dtConsulta.Rows[0].ItemArray[7].ToString() == "S")
            //{
            //    ckbFinal.Checked = true;
            //}
            //else
            //{
            //    ckbFinal.Checked = false;
            //}

            string Tiempo_Terminar_llegada = dtConsulta.Rows[0].ItemArray[5].ToString();
            double Tiempo_Trabajo_real = Convert.ToDouble(Tiempo_Terminar_llegada.Replace(",", "."));

            if (tbtTiempoTrabajoCP.Text != "")
            {
                double Tiempo_Trabajo_Paso = Convert.ToDouble(tbtTiempoTrabajoCP.Text.Replace(",", "."));

                //eficiencia buena
                if ((Tiempo_Trabajo_Paso <= Tiempo_Trabajo_real - 0.5) && (Tiempo_Trabajo_Paso >= Tiempo_Trabajo_real - 1))
                {
                    ImgEficienciaBuena.Visible = true;
                    ImgEficienciaBaja.Visible = false;
                    ImgEficienciaMedia.Visible = false;
                    ImgEficienciaOptima.Visible = false;
                }

                //eficiencia baja
                if (Tiempo_Trabajo_Paso > Tiempo_Trabajo_real)
                {
                    ImgEficienciaBaja.Visible = true;
                    ImgEficienciaMedia.Visible = false;
                    ImgEficienciaOptima.Visible = false;
                    ImgEficienciaBuena.Visible = false;
                }

                //eficiencia media
                if (Tiempo_Trabajo_Paso == Tiempo_Trabajo_real)
                {
                    ImgEficienciaMedia.Visible = true;
                    ImgEficienciaBaja.Visible = false;
                    ImgEficienciaOptima.Visible = false;
                    ImgEficienciaBuena.Visible = false;
                }

                //eficiencia optima
                if (Tiempo_Trabajo_Paso < Tiempo_Trabajo_real)
                {
                    ImgEficienciaOptima.Visible = true;
                    ImgEficienciaMedia.Visible = false;
                    ImgEficienciaBaja.Visible = false;
                    ImgEficienciaBuena.Visible = false;
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            InsertarTiempoEjecucion_Terminado();
        }

        private void InsertarTiempoEjecucion_Terminado()
        {
            QueryBuilder objInserta = new QueryBuilder();
            string Tiempo_de_trabajo = tbtTiempoTrabajoCP.Text.Replace(",", ".");
            if (tbtTiempoTrabajoCP.Text != "")
            {
                if (ckbFinal.Checked == true)
                {
                    //esta es la consulta que actualiza el estado del paso ademas del tiempo de trabajo del paso
                    string consultaInserta = "UPDATE FLUJO SET TIEMPO_EJECUTADO =" + Tiempo_de_trabajo.ToString() + "," + "PASO_FINAL =" + "'S'" +
                                             " WHERE PASO =" + id + "AND ID_FLUJO = " + lblFlujoCP.Text.ToString();
                    objInserta.EjecutarNoQuery(consultaInserta);

                    //esta es la consulta que actualiza la fecha de culminacion al haber colocado el paso como final para la tabla de ASIG_PASO_FLUJO
                    consultaInserta = "UPDATE ASIG_PASO_FLUJO SET FECHA_CULMINADO = sysdate" +
                                             " WHERE FLUJO =" + lblFlujoCP.Text.ToString() + " and USUARIO_ENCARGADO =" + "'" + lblEncargadoCP.Text.ToString() + "'";
                    objInserta.EjecutarNoQuery(consultaInserta);

                    //esta es la consulta que actualiza la fecha de culminacion del ticket y tambien el estado a finalizado de la tabla TICKET
                    consultaInserta = "UPDATE TICKET SET STATUS = 'FIN', FECHA_FIN = sysdate" +
                                             " WHERE ID_TICKET =" + lblTicketCP.Text.ToString() + " AND PROBLEMA = (SELECT ID_PROBLEMA FROM PROBLEMA WHERE DESCRIPCION =" + "'" + lblProblemaCP.Text.ToString() + "'" + ")";
                    objInserta.EjecutarNoQuery(consultaInserta);

                    //esta es la consulta que actualiza que el usuario al que se le asigno el ticket ahora pueda recibir otro ticket
                    consultaInserta = "UPDATE USUARIO SET CON_ASIGNACION = 'N'" +
                                             " WHERE ID_USUARIO = '" + lblEncargadoCP.Text.ToString() + "'" ;
                    objInserta.EjecutarNoQuery(consultaInserta);
                    
                    if (txtComentarioCP.Text != "")
                    {
                        //esta es la consulta que inserta los nuevos comentarios para el paso en el que se esta trabajando
                        consultaInserta = "INSERT INTO COMENTARIO_PASO (ID_FLUJO,NO_PASO,USUARIO_ENCARGADO,COMENTARIO)" +
                                                " VALUES (" + lblFlujoCP.Text.ToString() + "," + lblNoPasoCP.Text.ToString() + "," + "'" + lblEncargadoCP.Text.ToString() + "'" + "," + "'" + txtComentarioCP.Text.ToString() + "'" + ")";
                        objInserta.EjecutarNoQuery(consultaInserta);
                    }

                    Response.Write("<script language=javascript>alert('Tiempo de ejecucion del paso agregado exitosamente');</script>");
                    lblRespuestaCP.Text = "Tiempo de ejecucion del paso agregado exitosamente";
                }
                else
                {
                    //esta es la consulta que actualiza el estado del paso ademas del tiempo de trabajo del paso
                    string consultaInserta = "UPDATE FLUJO SET TIEMPO_EJECUTADO =" + Tiempo_de_trabajo.ToString() + "," + "PASO_FINAL =" + "'N'" +
                                             " WHERE PASO =" + id + "AND ID_FLUJO = " + lblFlujoCP.Text.ToString();
                    objInserta.EjecutarNoQuery(consultaInserta);

                    //esta es la consulta que actualiza la fecha de culminacion del ticket y tambien el estado a finalizado de la tabla TICKET
                    consultaInserta = "UPDATE TICKET SET STATUS = 'ENP'" +
                                             " WHERE ID_TICKET =" + lblTicketCP.Text.ToString() + " AND PROBLEMA = (SELECT ID_PROBLEMA FROM PROBLEMA WHERE DESCRIPCION =" + "'" + lblProblemaCP.Text.ToString() + "'" + ")";
                    objInserta.EjecutarNoQuery(consultaInserta);

                    if (txtComentarioCP.Text != "")
                    {
                        //esta es la consulta que inserta los nuevos comentarios para el paso en el que se esta trabajando
                        consultaInserta = "INSERT INTO COMENTARIO_PASO (ID_FLUJO,NO_PASO,USUARIO_ENCARGADO,COMENTARIO)" +
                                                " VALUES (" + lblFlujoCP.Text.ToString() + "," + lblNoPasoCP.Text.ToString() + "," + "'" + lblEncargadoCP.Text.ToString() + "'" + "," + "'" + txtComentarioCP.Text.ToString() + "'" + ")";
                        objInserta.EjecutarNoQuery(consultaInserta);
                    }

                    Response.Write("<script language=javascript>alert('Tiempo de ejecucion del paso agregado exitosamente');</script>");
                    lblRespuestaCP.Text = "Tiempo de ejecucion del paso agregado exitosamente";
                }
            }
            else
            {
                Response.Write("<script language=javascript>alert('Por favor llene el tiempo que ha trabajado en el paso');</script>");
                lblRespuestaCP.Text = "Por favor llene el tiempo que ha trabajado en el paso";
            }
            tbtTiempoTrabajoCP.Text = "";
            Response.Redirect("PantallaCulminacion.aspx");


        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("PantallaCulminacion.aspx");
        }
    }
}
